package agenti;

import java.io.*;
import java.util.*;
import jade.core.*;
import jade.domain.DFService;
import jade.domain.FIPAException;
import jade.domain.FIPAAgentManagement.*;

/**
 * Agente GestoreUrl: fornisce l'accesso, a livello di container, al file contenente i dati
 * riguardanti gli URL, le votazioni e i TAG.
 * @author Lorella Campanale
 * @author Marco Vanetti
 * @version 1.0
 */
public class GestoreURL extends Agent{
	private static final long serialVersionUID = 1L;
	private static final String urlFileName = "bin/url_file/url.txt";
	
	private File urlFile;					// File contenente gli URL (file di testo)
	private LinkedList<UrlElement> myUrls;	// Lista degli URL (Struttura dati)
	
	// Metodo di setup per l'agente
	protected void setup() {
		// Crea la lista degli URL
		myUrls = new LinkedList<UrlElement>(); 

		// Apre il file degli URL
		urlFile = new File(urlFileName);
		if (urlFile.exists()) {
			try {
				BufferedReader br = new BufferedReader(new FileReader(urlFile));
				String letto;
				// Ad ogni riga del file, inserisce un nuovo URL nella lista degli URL
	  	  		while ((letto = br.readLine()) != null) {
	  	  			myUrls.addLast(new UrlElement(letto));
	  	  		}
	  	  		br.close();
			} catch (Exception e) {
				e.printStackTrace();
				// Termina l'agente
				doDelete();
      	  	}			
        } else {
        	Utils.printErrMessage(this, "file degli URL " + urlFileName +  " inesistente!");
        	// Termina l'agente
			doDelete();
        }
		
		Utils.printMessage(this, "setup...");
		
		// Registra l'agente GestoreURL nelle pagine gialle
		yellowPagesRegister();
		
		// Aggiunge i behaviour per implementare il protocolli richiesti
		addBehaviour(new GestoreURLRequestPerformer());
	}
	
	/**
	 *  Metodo eseguito alla terminazione dell'agente
	 */
	protected void takeDown() {
		// De-registra l'agente GestoreURL nelle pagine gialle
		yellowPagesDeRegister();
		
		Utils.printMessage(this, "terminato.");
	}
	
	// Restituisce la lista degli URL
	public Serializable getMyUrls() {
		return myUrls;
	}
	
	/**
	 *  Registra l'agente GestoreURL nelle pagine gialle (DF).
	 */
	public void yellowPagesRegister () {
		DFAgentDescription dfd = new DFAgentDescription();
		dfd.setName(getAID());
		
		ServiceDescription sd = new ServiceDescription();
		sd.setType("GestoreURL");
		sd.setName("JADE-ProgettoPiccione");
		
		dfd.addServices(sd);
		
		try {
			DFService.register(this, dfd);
		} catch (FIPAException e) {
			e.printStackTrace();
		}
		
	}
	
	/**
	 * De-registra l'agente GestoreURL nelle pagine gialle.
	 */
	public void yellowPagesDeRegister () {
		try {
			DFService.deregister(this);
		} catch (FIPAException e) {
			e.printStackTrace();
		}
	}
}